package com.he.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.he.domain.dto.*;
import com.he.domain.vo.*;
import org.springframework.stereotype.Service;
import com.he.entity.Article;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * @author He
 * @version 1.0
 * @Date 2023/9/17 16:49
 * @Desc 文章业务接口
 */
@Service
public interface ArticleService extends IService<Article> {

    /**
     * 查看文章归档
     *
     * @return 文章归档
     */
    PageResult<ArchiveVO> getArchiveListVO();


    /**
     * 查看首页文章列表
     *
     * @return {@link PageResult<   ArticleHomeVO   >}
     */
    PageResult<ArticleHomeVO> listArticleHomeVO();

    /**
     * 获取热门文章列表
     *
     * @return {@link List<   ArticleHotVO   >}
     */
    List<ArticleHotVO> getHotArticleList();

    /**
     * 获取每天的文章数量和日期
     *
     * @return {@link List<   ArticleCountDateVO   >}
     */
    List<ArticleCountDateVO> getArticleCountAndDate(Integer year);

    /**
     * 保存文章图片
     *
     * @param file 文件
     * @return {@link String}
     */
    String saveArticleImages(MultipartFile file);

    /**
     * 添加文章
     *
     * @param article 文章信息
     */
    void addArticle(ArticleDTO article);

    /**
     * 文章列表
     *
     * @param condition 条件
     * @return 文章列表
     */
    PageResult<ArticleBackVO> listArticleBackVO(ConditionDTO condition);

    /**
     * 设置文章置顶状态
     *
     * @param top 文章置顶
     */
    void updateArticleTop(TopDTO top);

    /**
     * 设置文章推荐状态
     * @param recommend 文章推荐
     */
    void updateArticleRecommend(RecommendDTO recommend);

    /**
     * 删除
     *
     * @param articleIdList 文章ids
     */
    void deleteArticle(List<Integer> articleIdList);

    /**
     * 回收或恢复文章
     *
     * @param delete 逻辑删除
     */
    void updateArticleDelete(DeleteDTO delete);

    /**
     * 修改文章
     *
     * @param articleId 文章
     */
    ArticleInfoVO editArticle(Integer articleId);

    /**
     * 修改文章
     *
     * @param article 文章
     */
    void updateArticle(ArticleDTO article);

    /**
     * 查看文章
     *
     * @param keyword 文章id
     * @return {@link  List<ArticleSearchVO>}
     */
    List<ArticleSearchVO> listArticlesBySearch(String keyword);

    /**
     * 查看文章
     *
     * @param articleId 文章id
     * @return {@link ArticleVO}
     */
    ArticleVO getArticleHomeById(Integer articleId);
}
